package jee.boot.entity.task;

import jee.boot.common.utils.JsonMapper;

import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * 导入执行接口
 */
public interface ImportExecuteService extends TaskExecuteService {
    /**
     * 存储数据,可以存储到数据库或者其他地方,如果对导入的数据进行逻辑校验不通过时候,可以将校验结果保存到task.itemList中,然后抛出异常即可
     *
     * @param task     当前任务
     * @param data 任务数据对象如果是单sheet页的话，返回的是List，如果是多sheet页的话，返回的是一个Map对象，key是sheet页的名称
     */
    public void storeData(IexpTask task, Object data);

    /**
     * 按照业务检查文件内容
     *
     * @param file      要检查的文件
     * @param jsonParam 上传页面的条件
     * @return 返回错误信息，key1:ifEndTask value1:true/false, key2:message,value2:messageValue
     */
    default Map<String, Object> preFileCheck(File file, IexpTask task, String jsonParam) {
        Map<String, Object> result = new HashMap<>();
        result.put("ifEndTask", false);
        result.put("message", "");
        return result;
    }

    /**
     * 业务校验特殊设置sheet和entity
     *
     * @param file      要检查的文件
     * @param task      task对象信息
     * @param jsonParam 创建task时的参数
     */
    default Map<String, Object> setSheetAndEntitys(File file, IexpTask task, String jsonParam) {
        Map<String, Object> param = JsonMapper.fromJsonString(jsonParam, Map.class);
        return param;
    }

    /**
     * 按照业务检查文件内容
     *
     * @param storeDataMap 上传的数据
     * @param error        上传页面的条件
     * @return 返回错误信息，key1:ifEndTask value1:true/false, key2:message,value2:messageValue
     */
    default Map<String, Object> preDataCheck(Map<String, Object> storeDataMap, Set<String> error, IexpTask task) {
        Map<String, Object> result = new HashMap<>();
        result.put("ifEndTask", false);
        result.put("message", "");
        return result;
    }
    /**
     * 按照业务处理Errors
     *
     * @param task  任务
     * @param error  错误集合
     * @return 返回错误信息，key1:ifEndTask value1:true/false, key2:message,value2:messageValue
     */
    default void errorHandler(Set<String> error, IexpTask task) {
    }
}
